package com.epoint.utils.template.query;

import java.util.List;
import java.util.Map;

public abstract class QueryPageBlurTemplate<T>
{

    /**
         * 获取连接和数据库操作对象statement
     */
    abstract void getConnection();
    
    /**
         * 执行sql 
     * @param sql sql
     * @param clazz 返回的对象的class文件
     * @param paramFieldMap 字段数据类型（如： "String"、"Integer"。。。。）：对应的值 
         *                                          【！！注意：循序一定要和sql判断时字段顺序一致，为了Map《》插入顺序不变，应使用LinkedHashMap】
     * @return 结果
     */
    abstract List<T> queryPageBlurData(String sql, Class<T> clazz, Map<String, Object> linkedHashMap);
    
    /**
         * 释放资源
     */
    abstract void closeConnection();
    
    /**
         * 这里是指执行上面方法的规则，一般不能让子类随意更改所以用关键字final修饰
     * @param sql sql
     * @param id 组件id
     * @param clazz 要返回的class实例对象
     * @return 结果
     */
    public final List<T> executeSql(String sql, Class<T> clazz, Map<String, Object> paramFieldMap) {
        this.getConnection();
        List<T> list = this.queryPageBlurData(sql, clazz, paramFieldMap);
        this.closeConnection();
        return list;
    }

}
